package com.bestcem.xm.common.core.config.delaymq.dao.mapper;

import com.bestcem.xm.common.core.config.delaymq.entity.MqSendLogEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * mq消息发送记录
 *
 * @author jie.yao <jie.yao@idiaoyan.com>
 * @version v1.0
 * @date 2021/9/14 17:30
 */
@Mapper
public interface MqSendLogMapper {

    /**
     * 新增mq消息发送记录
     *
     * @param mqSendLogEntity mq消息发送记录
     * @return 插入成功条数
     */
    Integer insert(MqSendLogEntity mqSendLogEntity);

    /**
     * 查找mq消息
     *
     * @param status         状态
     * @param startDelayTime 查找的开始delayTime
     * @param endDelayTime   查找的结束delayTime
     * @return mq消息列表
     */
    List<MqSendLogEntity> listMqSendLogs(@Param("status") Integer status,
                                         @Param("startDelayTime") Date startDelayTime, @Param("endDelayTime") Date endDelayTime,
                                         @Param("batchQueryCount") int batchQueryCount, @Param("applicationName") String applicationName);

    /**
     * 根据id更新状态
     *
     * @param id     日志记录id
     * @param status 更新后的状态
     * @return 修改成功条数
     */
    Integer updateStatusById(@Param("senderId") String id, @Param("status") Integer status, @Param("updateTime") Date updateTime);

    /**
     * 根据id列表修改 次数 和状态
     *
     * @param ids         id列表
     * @param countModify 次数修改
     * @param newStatus   修改后状态
     * @param updateTime  修改时间
     * @return 更新结果
     */
    Integer batchUpdateStatus(@Param("ids") List<String> ids, @Param("countModify") int countModify, @Param("newStatus") int newStatus, @Param("updateTime") Date updateTime);

    /**
     * 根据id列表查询mq消息
     *
     * @param ids id列表
     * @return
     */
    List<MqSendLogEntity> listByIds(@Param("ids") List<String> ids);

    /**
     * 删除创建时间在 dateTime 之前 创建,且状态为statuses 的消息
     *
     * @param statuses 状态
     * @param dateTime 时间
     * @return
     */
    Integer deleteMqSendLogs(@Param("statuses") List<Integer> statuses, @Param("dateTime") Date dateTime, @Param("applicationName") String applicationName);
}
